home *** CD-ROM | disk | FTP | other *** search
/ Softdisk G-S 88 / SGDS 88.2mg / SDGS.88 / SDC88 / C / SOUNDMAKER2 (.txt) < prev    next >
Encoding:
Applesoft BASIC Source Code  |  1988-12-25  |  12.8 KB  |  606 lines  |  [FC] Applesoft BASIC Program (0x0801)

  1. 0  LOMEM: 28672
  2. 1  CLEAR : DIM A(500),A$(13),L(8),V(4),I$(7),VT(3),HT(3),PV(8,4)
  3. 2  COLOR= 0: HCOLOR= 0
  4. 3  PRINT  CHR$(21): TEXT : HOME : HGR2 
  5. 5  PRINT  CHR$(4)"BLOADSOUNDPLAY"
  6. 6  PRINT  CHR$(4)"BLOADBOX.SHADOW"
  7. 8  PRINT  CHR$(4)"BRUNBASH.STD"
  8. 9  POKE 48688, PEEK(0): POKE 48689, PEEK(1)
  9. 10  PRINT  CHR$(4)"BLOADLIBRARY,A$6500"
  10. 12  INVERSE 
  11. 15 BOX = 24576
  12. 20 LOC = 26112:GO = LOC
  13. 25  GOSUB 14000
  14. 30 TEST = 26032
  15. 35 BEEP = 26064
  16. 40  POKE TEST,32: POKE LOC,32:LOC = LOC +1
  17. 50  POKE TEST +1,0: POKE LOC,0:LOC = LOC +1
  18. 60  POKE TEST +2,101: POKE LOC,101:LOC = LOC +1
  19. 70  POKE TEST +3,96: POKE LOC,96:LOC = LOC +1
  20. 80  POKE TEST +4,0: FOR I = 0 TO 4: POKE LOC +I,0: NEXT 
  21. 90 LHI = LOC
  22. 95  FOR I = 0 TO 3: POKE BEEP +I, PEEK(TEST +I): NEXT : POKE BEEP +4,5: POKE BEEP +5,235: POKE BEEP +6,8: POKE BEEP +7,0
  23. 100  REM <CTRL-0x0a>read data<CTRL-0x0a>
  24. 110  FOR I = 1 TO 13: READ A$(I): NEXT 
  25. 120  FOR I = 1 TO 8: READ L(I): NEXT 
  26. 130  FOR I = 1 TO 6: READ I$(I): NEXT 
  27. 140  FOR I = 0 TO 3: READ VT(I),HT(I): NEXT 
  28. 145  FOR I = 1 TO 6: READ DD$:DD$(I) = " " +DD$ +" ": NEXT 
  29. 150 HI = 0:TB = 0:BB = 0:PT = 0:TN = 0
  30. 160 PV(8,1) = 200:CS$ = "_ ":B$ = "0123456789ABCDEF"
  31. 200  REM <CTRL-0x0a>screen setup<CTRL-0x0a>
  32. 210  CALL BOX,1,1,40,24
  33. 220  VTAB 2: HTAB 4: PRINT "Soundmaker II   (c) 1988 Softdisk."
  34. 230  CALL BOX,2,3,20,16
  35. 240  PRINT "  Selections Box";
  36. 250  CALL BOX,2,19,38,5
  37. 260  GOSUB 800
  38. 280  FOR S = 1 TO 13: VTAB 4 +S: HTAB 4: PRINT A$(S): NEXT 
  39. 290 S = 1
  40. 300  REM <CTRL-0x0a>Program start<CTRL-0x0a>
  41. 305 TS = 13: POKE 49168,0
  42. 310  GOSUB 2000
  43. 320  GOSUB 3000
  44. 330  IF K$ =  CHR$(27)  THEN S = 13
  45. 340  IF S <9  THEN 400
  46. 350  ON S -8 GOSUB 9500,9900,11000,12000,13000
  47. 360  GOTO 300
  48. 400  GOSUB 6000:V(0) = S
  49. 410  GOSUB 5000
  50. 420 PT = PT +1
  51. 430 A(PT) = V(0)
  52. 440  GOSUB 9000: GOSUB 7500
  53. 490  GOTO 300
  54. 800  CALL BOX,22,3,18,16
  55. 810  PRINT " Edit box #"
  56. 820  POKE 32,0: POKE 33,40: POKE 34,0: POKE 35,24
  57. 825  GOSUB 8500
  58. 830  RETURN 
  59. 999  END 
  60. 1000  REM <CTRL-0x0a>center ms$<CTRL-0x0a>
  61. 1010  HTAB  INT( PEEK(33)/2 +1) - INT( LEN(MS$)/2): PRINT MS$
  62. 1020  RETURN 
  63. 1500  REM <CTRL-0x0a>CHANGE HEX TO DECIMAL<CTRL-0x0a>
  64. 1505 ADDR = 0
  65. 1510  FOR I = 1 TO  LEN(AD$):D$ =  MID$ (AD$,I,1): IF D$ >"Z"  THEN D$ =  CHR$( ASC(D$) -32)
  66. 1520  FOR PA = 1 TO  LEN(B$)
  67. 1530  IF D$ < > MID$ (B$,PA,1)  THEN  NEXT PA
  68. 1540 ADDR = ADDR +(PA -1) *16 ^( LEN(AD$) -I)
  69. 1550  NEXT I
  70. 1570  RETURN 
  71. 2000  REM <CTRL-0x0a>Bottom box<CTRL-0x0a>
  72. 2010  GOSUB 2500
  73. 2020  VTAB 20:MS$ = "Arrows move highlight,": GOSUB 1000
  74. 2030 MS$ = "RETURN Selects, ESC Exits.": GOSUB 1000
  75. 2040  RETURN 
  76. 2500  FOR I = 20 TO 22: VTAB I: HTAB 3: PRINT  SPC( 36): NEXT : RETURN 
  77. 2800  REM <CTRL-0x0a>Edit Message<CTRL-0x0a>
  78. 2810  GOSUB 2500
  79. 2820  VTAB 20:MS$ = "Arrows move highlight, '<' pages up,": GOSUB 1000
  80. 2830 MS$ = "'>' pages down, RETURN edits item,": GOSUB 1000
  81. 2840 MS$ = "I)nsert, D)elete, ESC stops editing.": GOSUB 1000
  82. 2850  RETURN 
  83. 3000  REM <CTRL-0x0a>flashing getbox1<CTRL-0x0a>
  84. 3010  VTAB 4 +S: HTAB 3: NORMAL : PRINT " "A$(S)" "
  85. 3020  FOR PA = 0 TO 50: IF  PEEK(49152) <128  THEN  NEXT 
  86. 3030  VTAB 4 +S: HTAB 3: INVERSE : PRINT " "A$(S)" "
  87. 3040  FOR PA = 0 TO 10: IF  PEEK(49152) <128  THEN  NEXT : GOTO 3010
  88. 3050  GET K$
  89. 3060  IF K$ =  CHR$(13)  THEN 3150
  90. 3065  IF K$ =  CHR$(27)  THEN 3160
  91. 3070  IF K$ =  CHR$(8)  OR K$ =  CHR$(11)  THEN S = S -1: GOTO 3100
  92. 3080  IF K$ =  CHR$(10)  OR K$ =  CHR$(21)  THEN S = S +1: GOTO 3100
  93. 3090  GOSUB 4000
  94. 3100  IF S >TS  THEN S = 1
  95. 3110  IF S <1  THEN S = TS
  96. 3120  GOTO 3000
  97. 3150  NORMAL : VTAB 4 +S: HTAB 3: PRINT " "A$(S)" ": INVERSE 
  98. 3160  RETURN 
  99. 3500  REM <CTRL-0x0a>CALCULATE HB,LB<CTRL-0x0a>
  100. 3510 HB =  INT(ADDR/256):LB = ADDR -(HB *256)
  101. 3520  RETURN 
  102. 4000  REM <CTRL-0x0a>buzz<CTRL-0x0a>
  103. 4010  CALL BEEP: RETURN 
  104. 4500  REM <CTRL-0x0a>clear<CTRL-0x0a>
  105. 4510  FOR I = 0 TO PT:A(I) = 0: NEXT 
  106. 4520 PT = 0:LOC = GO +4
  107. 4530  FOR I = 0 TO 4: POKE LOC +I,0: NEXT 
  108. 4540  RETURN 
  109. 5000  REM <CTRL-0x0a>input note data<CTRL-0x0a>
  110. 5005 S = V(0)
  111. 5010  GOSUB 2500
  112. 5020  VTAB 20: HTAB 4: PRINT A$(S)
  113. 5030  IF L(S) <2  THEN 5300
  114. 5040 ND = (L(S) = 4) *2 +(L(S) = 2) *5
  115. 5050  FOR I = 1 TO L(S) -1
  116. 5060 CV = I: IF L(S) = 4  THEN CV = I +(I = 2) -(I = 3)
  117. 5065  IF V(CV) = 0  THEN V(CV) = PV(S,CV)
  118. 5070  VTAB VT(I): HTAB HT(I): PRINT I$(I +ND)": ";V(CV)
  119. 5080  NEXT 
  120. 5090  FOR I = 1 TO L(S) -1
  121. 5092 BV = 0:TV = 256
  122. 5093 CV = I: IF L(S) = 4  THEN CV = I +(I = 2) -(I = 3): IF CV = 1  THEN BV = (S = 3) +(S = 6):TV = 256 -(S = 4) -(S = 7)
  123. 5095  IF CV <3  THEN 5100
  124. 5096  IF S = 4  OR S = 7  THEN BV = V(1)
  125. 5097  IF S = 3  OR S = 6  THEN TV = V(1)
  126. 5100  VTAB VT(I): HTAB HT(I): PRINT I$(I +ND)": ";
  127. 5110 VA = V(CV): GOSUB 5500
  128. 5120  IF VA <0  THEN 5200
  129. 5130 V(CV) = VA
  130. 5140  NEXT 
  131. 5300  RETURN 
  132. 5500  REM <CTRL-0x0a>enter value<CTRL-0x0a>
  133. 5510 H =  PEEK(36) +1:V =  PEEK(37) +1
  134. 5515  GOTO 5580
  135. 5520  VTAB V: HTAB H: PRINT VA; SPC( 4 - LEN( STR$(VA)))
  136. 5530  GOSUB 5900
  137. 5540  VTAB V: HTAB H: PRINT VA"< "
  138. 5550  GOSUB 5900: IF  PEEK(49152) <128  THEN 5520
  139. 5560  GET K$
  140. 5565  IF K$ =  CHR$(27)  THEN 6500
  141. 5570  IF K$ =  CHR$(11)  OR K$ = "="  OR K$ = "+"  OR K$ =  CHR$(21)  THEN VA = VA +1: GOTO 5580
  142. 5575  IF K$ =  CHR$(10)  OR K$ = "-"  OR K$ =  CHR$(8)  THEN VA = VA -1: GOTO 5580
  143. 5577  IF K$ > = "0"  AND K$ < = "9"  THEN 5700
  144. 5578  IF K$ =  CHR$(13)  THEN 5595
  145. 5579  GOSUB 4000
  146. 5580  IF VA >TV -1  THEN VA = TV -1: GOSUB 4000: GOTO 5520
  147. 5585  IF VA <BV +1  THEN VA = BV +1: GOSUB 4000: GOTO 5520
  148. 5590  GOTO 5540
  149. 5595  VTAB V: HTAB H: PRINT VA" "
  150. 5597  RETURN 
  151. 5700  REM <CTRL-0x0a>enter data<CTRL-0x0a>
  152. 5710 VA$ = K$
  153. 5720  VTAB V: HTAB H: PRINT VA$; SPC( 4 - LEN(VA$))
  154. 5730  GOSUB 5900
  155. 5740  VTAB V: HTAB H: PRINT VA$;"_"
  156. 5750  GOSUB 5900: IF  PEEK(49152) <128  THEN 5720
  157. 5760  GET K$: IF K$ =  CHR$(13)  THEN 5850
  158. 5770  IF K$ =  CHR$(27)  THEN 6500
  159. 5780  IF (K$ = ""  OR K$ =  CHR$(8))  AND  LEN(VA$) <2  THEN VA$ = "": GOTO 5720
  160. 5790  IF (K$ = ""  OR K$ =  CHR$(8))  THEN VA$ =  LEFT$(VA$, LEN(VA$) -1): GOTO 5720
  161. 5800  IF K$ <"0"  OR K$ >"9"  THEN  GOSUB 4000: GOTO 5720
  162. 5810  IF  LEN(VA$) >2  THEN  GOSUB 4000: GOTO 5720
  163. 5820 VA$ = VA$ +K$
  164. 5830  GOTO 5720
  165. 5850  IF  VAL(VA$) > = TV  OR  VAL(VA$) < = BV  THEN  GOSUB 4000: GOTO 5520
  166. 5860 VA =  VAL(VA$)
  167. 5870  GOTO 5595
  168. 5900  FOR PA = 0 TO 15: IF  PEEK(49152) <128  THEN  NEXT 
  169. 5910  RETURN 
  170. 6000  REM <CTRL-0x0a>setup v's<CTRL-0x0a>
  171. 6005  FOR I = 0 TO 4:V(I) = 0: NEXT 
  172. 6010 V(0) =  PEEK(LHI)
  173. 6020  IF L(V(0)) <2  THEN 6090
  174. 6030  FOR I = 1 TO L(V(0)) -1
  175. 6040 V(I) =  PEEK(LHI +I)
  176. 6050  NEXT 
  177. 6090  RETURN 
  178. 6500  REM <CTRL-0x0a>Abort!<CTRL-0x0a>
  179. 6510  GOSUB 2500
  180. 6520 MS$ = "Aborted.": VTAB 21: GOSUB 1000
  181. 6525  IF EB = 1  THEN V(0) = 0: RETURN 
  182. 6530  GOSUB 7000
  183. 6540  CALL 54915: GOTO 300
  184. 6800  REM <CTRL-0x0a>Print Wait!<CTRL-0x0a>
  185. 6810  GOSUB 2500
  186. 6820 MS$ = "Please wait.  Sorting data..": VTAB 21: GOSUB 1000
  187. 6830  RETURN 
  188. 7000  REM <CTRL-0x0a>printlast<CTRL-0x0a>
  189. 7010  GOSUB 800
  190. 7020 BB = PT:TB = BB -6: IF TB <1  THEN TB = 1
  191. 7030  FOR I = TB TO BB
  192. 7040  VTAB (I -TB) *2 +5: HTAB 23
  193. 7050  PRINT A$(A(I))
  194. 7060  NEXT :HI = BB:LHI = LOC
  195. 7070  RETURN 
  196. 7500  REM <CTRL-0x0a>scrolldown<CTRL-0x0a>
  197. 7502 IP = 0
  198. 7505  IF HI = PT  THEN  GOSUB 4000: GOTO 7590
  199. 7510 HI = HI +1: IF HI < = BB  OR BB = PT  THEN I = HI:IP = 1: GOTO 7545
  200. 7520 BB = BB +1:TB = BB -6: IF TB <1  THEN TB = 1
  201. 7525  IF PT <8  THEN IP = 1
  202. 7530  FOR I = BB TO TB  STEP  -1
  203. 7540  VTAB (I -TB) *2 +5: HTAB 23: PRINT  SPC( 16)
  204. 7545  IF EB = 1  THEN  IF I = HI  THEN  NORMAL 
  205. 7550  VTAB (I -TB) *2 +5: HTAB 23
  206. 7560  PRINT A$(A(I))
  207. 7565  INVERSE : IF IP = 1  THEN 7580
  208. 7570  NEXT 
  209. 7580  GOSUB 8500
  210. 7590  RETURN 
  211. 7800  REM <CTRL-0x0a>PRINT'EM DOWN THE ROW<CTRL-0x0a>
  212. 7810  FOR I = 5 TO 17  STEP 2: VTAB I: HTAB 23: PRINT  SPC( 16): NEXT 
  213. 7820  FOR I = TB TO BB: VTAB (I -TB) *2 +5: HTAB 23
  214. 7830  IF I = HI  THEN  NORMAL 
  215. 7840  PRINT A$(A(I))
  216. 7850  INVERSE : NEXT 
  217. 7860  RETURN 
  218. 8000  REM <CTRL-0x0a>scrollup<CTRL-0x0a>
  219. 8002 IP = 0
  220. 8005  IF HI = 1  THEN  GOSUB 4000: GOTO 8090
  221. 8010 HI = HI -1: IF HI > = TB  OR TB = 1  THEN I = HI:IP = 1: GOTO 8045
  222. 8020 BB = BB -1:TB = BB -6: IF TB <1  THEN TB = 1
  223. 8030  FOR I = TB TO BB
  224. 8040  VTAB (I -TB) *2 +5: HTAB 23: PRINT  SPC( 16)
  225. 8045  IF EB = 1  THEN  IF I = HI  THEN  NORMAL 
  226. 8050  VTAB (I -TB) *2 +5: HTAB 23
  227. 8060  PRINT A$(A(I))
  228. 8065  INVERSE : IF IP = 1  THEN 8080
  229. 8070  NEXT 
  230. 8080  GOSUB 8500
  231. 8090  RETURN 
  232. 8500  REM <CTRL-0x0a>PRINT HI #<CTRL-0x0a>
  233. 8510  VTAB 4: HTAB 35: PRINT "    ": VTAB 4: HTAB 35: PRINT HI
  234. 8520  RETURN 
  235. 9000  REM <CTRL-0x0a>poke it in ml<CTRL-0x0a>
  236. 9010  FOR I = 0 TO 4
  237. 9020  IF V(I) < >0  THEN  POKE LOC,V(I):LOC = LOC +1
  238. 9025 PV(V(0),I) = V(I)
  239. 9030  POKE TEST +4 +I,V(I)
  240. 9040  NEXT 
  241. 9050 LHI = LOC: FOR I = 0 TO 4: POKE LOC +I,0: NEXT 
  242. 9060  CALL TEST
  243. 9070  RETURN 
  244. 9200  REM <CTRL-0x0a>poke it in memory & play it<CTRL-0x0a>
  245. 9210  FOR I = 0 TO 4
  246. 9220  IF V(I) < >0  THEN  POKE LHI +I,V(I)
  247. 9225 PV(V(0),I) = V(I)
  248. 9230  POKE TEST +4 +I,V(I)
  249. 9240  NEXT 
  250. 9250  CALL TEST
  251. 9260  RETURN 
  252. 9500  REM <CTRL-0x0a>play routine<CTRL-0x0a>
  253. 9505  GOSUB 2500:MS$ = "Playing Routine..": VTAB 21: GOSUB 1000
  254. 9510  CALL GO
  255. 9520  RETURN 
  256. 9900  REM <CTRL-0x0a>Edit preset<CTRL-0x0a>
  257. 9980 EB = 1
  258. 9990 LHI = LOC -L(A(PT))
  259. 10000  REM <CTRL-0x0a>Edit routines<CTRL-0x0a>
  260. 10005  IF PT = 0  THEN 10999
  261. 10020  GOSUB 2800
  262. 10040  GOSUB 10900
  263. 10050  IF K$ =  CHR$(8)  OR K$ =  CHR$(11)  THEN  GOSUB 8000:LHI = LHI -L(A(HI)): IF LHI <GO +4  THEN LHI = GO +4
  264. 10060  IF K$ =  CHR$(21)  OR K$ =  CHR$(10)  THEN LHI = LHI +L(A(HI)): GOSUB 7500: IF LHI >LOC -1  THEN LHI = LHI -L(A(PT))
  265. 10065  IF K$ = "<"  OR K$ = ","  THEN 10700
  266. 10067  IF K$ = ">"  OR K$ = "."  THEN 10800
  267. 10070  IF K$ = "I"  THEN 10200
  268. 10080  IF K$ = "D"  THEN 10400
  269. 10090  IF K$ =  CHR$(13)  THEN 10600
  270. 10100  IF K$ =  CHR$(27)  THEN  GOSUB 7000: GOTO 10999
  271. 10110  IF K$ < > CHR$(8)  AND K$ < > CHR$(11)  AND K$ < > CHR$(10)  AND K$ < > CHR$(21)  THEN  GOSUB 4000
  272. 10120  GOTO 10040
  273. 10200  REM <CTRL-0x0a>INSERT<CTRL-0x0a>
  274. 10201  NORMAL : GOSUB 10970
  275. 10205 S = 1
  276. 10210 TS = 8: INVERSE : VTAB 14: HTAB 3: PRINT " "A$(10)" "
  277. 10220  GOSUB 2000:MS$ = "Making insert at sound #" + STR$(HI): GOSUB 1000
  278. 10230  FOR I = 0 TO 4:V(I) = 0: NEXT 
  279. 10240  GOSUB 3000
  280. 10250  IF K$ =  CHR$(27)  THEN  GOSUB 6500: GOTO 10380
  281. 10260 V(0) = S: GOSUB 5000
  282. 10270  IF V(0) = 0  THEN 10380
  283. 10280  GOSUB 2500: VTAB 21:MS$ = "Inserting.  Please Wait..": GOSUB 1000
  284. 10290  FOR I = LOC TO LHI  STEP  -1
  285. 10300  POKE I +L(V(0)), PEEK(I): NEXT 
  286. 10310 LOC = LOC +L(V(0))
  287. 10320  FOR I = LOC TO LOC +4: POKE I,0: NEXT 
  288. 10330  GOSUB 9200
  289. 10340  FOR I = PT TO HI  STEP  -1:A(I +1) = A(I): NEXT 
  290. 10350 PT = PT +1:A(HI) = V(0)
  291. 10360 BB = TB +6: IF BB >PT  THEN BB = PT
  292. 10370  GOSUB 7800
  293. 10380  NORMAL : VTAB 14: HTAB 3: PRINT " "A$(10)" ": INVERSE : VTAB 4 +S: HTAB 3: PRINT " "A$(S)" "
  294. 10390  GOTO 10000
  295. 10400  REM <CTRL-0x0a>DELETE<CTRL-0x0a>
  296. 10405  NORMAL : GOSUB 10970
  297. 10410  GOSUB 2500: VTAB 21:MS$ = "Deleting. Please wait..": GOSUB 1000
  298. 10420  FOR I = LHI TO LOC
  299. 10430  POKE I, PEEK(I +L(A(HI)))
  300. 10440  NEXT 
  301. 10450 LOC = LOC -L(A(HI))
  302. 10460  FOR I = LOC TO LOC +4: POKE I,0: NEXT 
  303. 10470  FOR I = HI TO PT -1
  304. 10480 A(I) = A(I +1)
  305. 10490  NEXT 
  306. 10500 A(PT) = 0:PT = PT -1
  307. 10510  IF PT <BB  THEN BB = PT:TB = BB -6: IF TB <1  THEN TB = 1
  308. 10520  IF BB <HI  THEN HI = BB
  309. 10530  GOSUB 7800: GOTO 10000
  310. 10600  REM <CTRL-0x0a>EDIT<CTRL-0x0a>
  311. 10605  NORMAL : GOSUB 10970
  312. 10610  GOSUB 6000
  313. 10620  GOSUB 5000
  314. 10630  IF V(0) = 0  THEN 10650
  315. 10640  GOSUB 9200
  316. 10650  GOTO 10000
  317. 10700  REM <CTRL-0x0a>pageup<CTRL-0x0a>
  318. 10702  GOSUB 2500:MS$ = "Page up.": VTAB 21: GOSUB 1000
  319. 10705 TH = HI -1
  320. 10710 TB = TB -7:HI = HI -7
  321. 10720  IF TB <1  THEN TB = 1
  322. 10730  IF HI <1  THEN HI = 1
  323. 10740 BB = TB +6
  324. 10750  IF BB >PT  THEN BB = PT
  325. 10755  IF TH <HI  THEN  GOSUB 4000: GOTO 10790
  326. 10760  FOR I = TH TO HI  STEP  -1
  327. 10770 LHI = LHI -L(A(I)): NEXT 
  328. 10775  GOSUB 8500
  329. 10780  GOSUB 7800
  330. 10790  GOTO 10000
  331. 10800  REM <CTRL-0x0a>pagedown<CTRL-0x0a>
  332. 10802  GOSUB 2500:MS$ = "Page down.": VTAB 21: GOSUB 1000
  333. 10805 TH = HI
  334. 10810 BB = BB +7:HI = HI +7
  335. 10820  IF BB >PT  THEN BB = PT
  336. 10830  IF HI >PT  THEN HI = PT
  337. 10840 TB = BB -6
  338. 10850  IF TB <1  THEN TB = 1
  339. 10855  IF TH = HI  THEN  GOSUB 4000: GOTO 10890
  340. 10860  FOR I = TH TO HI -1
  341. 10870 LHI = LHI +L(A(I)): NEXT 
  342. 10880  GOSUB 7800
  343. 10885  GOSUB 8500
  344. 10890  GOTO 10000
  345. 10900  REM <CTRL-0x0a>FLASHING GETBOX2<CTRL-0x0a>
  346. 10910  NORMAL : GOSUB 10970
  347. 10920  FOR PA = 0 TO 15: IF  PEEK(49152) <128  THEN  NEXT 
  348. 10930  INVERSE : GOSUB 10970
  349. 10940  FOR PA = 0 TO 15: IF  PEEK(49152) <128  THEN  NEXT : GOTO 10910
  350. 10950  GET K$: IF K$ >"Z"  THEN K$ =  CHR$( ASC(K$) -32)
  351. 10960  RETURN 
  352. 10970  VTAB (HI -TB) *2 +5: HTAB 23: PRINT A$(A(HI)): INVERSE : RETURN 
  353. 10999 EB = 0:S = 10: RETURN 
  354. 11000  REM  <CTRL-0x0a>disk options<CTRL-0x0a>
  355. 11002 EB = 1
  356. 11005  CALL BOX,22,3,18,16
  357. 11010  HOME : PRINT " Disk Options:"
  358. 11015  POKE 32,0: POKE 33,40: POKE 34,0: POKE 35,24: HOME 
  359. 11020  GOSUB 2000
  360. 11045  FOR D = 1 TO 6: GOSUB 11225: NEXT 
  361. 11050 D = 1
  362. 11055  GOSUB 11245
  363. 11060  IF DD$ =  CHR$(8)  OR DD$ =  CHR$(11)  THEN D = D -1: IF D <1  THEN D = 6
  364. 11065  IF DD$ =  CHR$(21)  OR DD$ =  CHR$(10)  THEN D = D +1: IF D >6  THEN D = 1
  365. 11070  IF DD$ =  CHR$(27)  THEN 11090
  366. 11075  IF DD$ < > CHR$(13)  THEN 11055
  367. 11080  ON D GOTO 11280,11395,11545,11610,11610,11090
  368. 11085  GOTO 11055
  369. 11090  REM <CTRL-0x0a>exit disk options<CTRL-0x0a>
  370. 11092 EB = 0
  371. 11095  CALL 54915
  372. 11100  GOSUB 7000
  373. 11105  GOTO 300
  374. 11110  REM <CTRL-0x0a>enter nt$<CTRL-0x0a>
  375. 11115 NT$ = "SND."
  376. 11120 VT =  PEEK(37) +1
  377. 11125  VTAB VT: HTAB 3: PRINT ">"NT$;"  " CHR$(8) CHR$(8);
  378. 11130  GOSUB 11590
  379. 11135  IF DD$ < > CHR$(8)  AND DD$ < >""  THEN 11155
  380. 11140  IF  LEN(NT$) <2  THEN  VTAB VT:NT$ = "": GOTO 11120
  381. 11145 NT$ =  LEFT$(NT$, LEN(NT$) -1)
  382. 11150  GOTO 11125
  383. 11155  IF DD$ >"Z"  THEN DD$ =  CHR$( ASC(DD$) -32)
  384. 11160  IF DD$ = "/"  AND D = 3  THEN 11185
  385. 11163  IF DD$ = "$"  AND D = 2  AND NT$ = ""  THEN 11185
  386. 11165  IF DD$ =  CHR$(13)  THEN  RETURN 
  387. 11170  IF DD$ =  CHR$(27)  THEN NT$ = "": GOSUB 6500: RETURN 
  388. 11175  IF NT$ < >""  THEN  IF DD$ > = "0"  AND DD$ < = "9"  OR DD$ = "."  THEN 11185
  389. 11180  IF DD$ <"A"  THEN  GOSUB 4000: GOTO 11125
  390. 11185  IF  LEN(NT$) <LL  THEN NT$ = NT$ +DD$
  391. 11190  GOTO 11125
  392. 11195  REM <CTRL-0x0a>error<CTRL-0x0a>
  393. 11200  POKE 216,0
  394. 11202  POKE GO +1,0: POKE GO +2,101
  395. 11205  PRINT  CHR$(4)"CLOSE"
  396. 11210  GOSUB 2500: VTAB 21:MS$ = "There was an error.": GOSUB 1000
  397. 11215  FOR PA = 0 TO 100: IF  PEEK(49152) <128  THEN  NEXT 
  398. 11220  GOSUB 2000: GOTO 11055
  399. 11225  REM <CTRL-0x0a>center in rt box<CTRL-0x0a>
  400. 11230  VTAB 6 +D: HTAB 23 +(16 - LEN(DD$(D)))/2
  401. 11235  PRINT DD$(D)
  402. 11240  RETURN 
  403. 11245  REM <CTRL-0x0a>get baby<CTRL-0x0a>
  404. 11250  NORMAL : GOSUB 11225
  405. 11255  FOR PA = 0 TO 15: IF  PEEK(49152) <128  THEN  NEXT 
  406. 11260  INVERSE : GOSUB 11225
  407. 11265  FOR PA = 0 TO 15: IF  PEEK(49152) <128  THEN  NEXT : GOTO 11250
  408. 11270  GET DD$
  409. 11275  RETURN 
  410. 11280  REM <CTRL-0x0a>load<CTRL-0x0a>
  411. 11285  GOSUB 2500:MS$ = "A)ppend file to existing routine, ": VTAB 20: GOSUB 1000
  412. 11290 MS$ = "C)lear memory before loading file.": GOSUB 1000
  413. 11295  HTAB 4: PRINT "Choose one: ";
  414. 11300  GOSUB 11590:CM = 0
  415. 11305  IF DD$ = "A"  OR DD$ = "a"  THEN 11330
  416. 11310  IF DD$ =  CHR$(27)  THEN  GOSUB 6500: GOSUB 2000: GOTO 11055
  417. 11315  IF DD$ < >"c"  AND DD$ < >"C"  THEN  GOSUB 4000: GOTO 11300
  418. 11320 CM = 1
  419. 11330  GOSUB 2500: VTAB 20: HTAB 4: PRINT "Load:":LL = 15
  420. 11335  GOSUB 11110
  421. 11340  IF NT$ = ""  THEN  GOSUB 2000: GOTO 11055
  422. 11343  IF CM = 1  THEN  GOSUB 4500
  423. 11345  ONERR  GOTO 11195
  424. 11350  PRINT  CHR$(4)"BLOAD"NT$",A"LOC
  425. 11355  POKE 216,0: GOSUB 6800
  426. 11360 LOC = LOC +4:LHI = LOC
  427. 11365  IF  PEEK(LOC) = 0  THEN 11380
  428. 11370 PT = PT +1:A(PT) =  PEEK(LOC)
  429. 11375 LOC = LOC +L(A(PT)): GOTO 11365
  430. 11380  FOR I = LHI TO LOC +4: POKE I -4, PEEK(I): NEXT 
  431. 11382 LOC = LOC -4:HI = PT:LHI = LOC
  432. 11385  GOSUB 2000
  433. 11390  GOTO 11055
  434. 11395  REM <CTRL-0x0a>save<CTRL-0x0a>
  435. 11400  GOSUB 2500
  436. 11405 MS$ = "Save - Where will the library index": VTAB 20: GOSUB 1000
  437. 11410 MS$ = "be loaded?  (This is necessary!)": GOSUB 1000
  438. 11415  VTAB 22:LL = 5:NT$ = "$6500": GOSUB 11120
  439. 11420  IF NT$ = ""  THEN  GOSUB 2000: GOTO 11055
  440. 11425  IF  LEFT$(NT$,1) < >"$"  THEN  GOSUB 4000: GOTO 11415
  441. 11430  IF  LEN(NT$) <4  THEN  GOSUB 4000: GOTO 11415
  442. 11435  FOR I = 2 TO  LEN(NT$): IF  MID$ (NT$,I,1) <"0"  OR  MID$ (NT$,I,1) >"F"  OR  MID$ (NT$,I,1) >"9"  AND  MID$ (NT$,I,1) <"A"  THEN  GOSUB 4000: GOTO 11415
  443. 11438  NEXT 
  444. 11440  IF  LEN(NT$) = 4  THEN NT$ = "$0" + RIGHT$(NT$,3)
  445. 11445 AD$ =  RIGHT$(NT$,4): GOSUB 1500
  446. 11450  IF ADDR = 0  THEN 11415
  447. 11455  GOSUB 2500: VTAB 20: HTAB 4: PRINT "Library loaded at: A$"AD$", A"ADDR
  448. 11460  HTAB 4: PRINT "Is this ok?";
  449. 11465  GOSUB 11590
  450. 11470  IF DD$ = "Y"  OR DD$ = "y"  THEN 11485
  451. 11475  IF DD$ < >"n"  AND DD$ < >"N"  THEN  GOSUB 4000: GOTO 11465
  452. 11480  GOTO 11395
  453. 11485  GOSUB 2500: VTAB 20: HTAB 4: PRINT "Save:":LL = 15
  454. 11490  GOSUB 11110
  455. 11495  IF NT$ = ""  THEN  GOSUB 2000: GOTO 11055
  456. 11500  ONERR  GOTO 11195
  457. 11505  GOSUB 3500
  458. 11510  POKE GO +1,LB: POKE GO +2,HB
  459. 11515  PRINT  CHR$(4)"bsave"NT$",a$6600,l"LOC +3 -GO
  460. 11516  POKE 216,0
  461. 11518  POKE GO +1,0: POKE GO +2,101
  462. 11520  GOSUB 2500: VTAB 20: HTAB 4: PRINT "Library: A$"AD$", Soundplay: A$300"
  463. 11525 MS$ = "Load " +NT$ +" anywhere else!": GOSUB 1000
  464. 11530 MS$ = "Please press a key to continue.": GOSUB 1000
  465. 11535  POKE 49168,0: GET DD$
  466. 11540  GOSUB 2000: GOTO 11055
  467. 11545  REM <CTRL-0x0a>prefix<CTRL-0x0a>
  468. 11546  GOSUB 2500: VTAB 20:MS$ = "Prefix.": GOSUB 1000
  469. 11548 MS$ = "Set P)refix, or S)lot and drive?": GOSUB 1000
  470. 11550  HTAB 4: PRINT "Choose (P/S):";
  471. 11552  GOSUB 11590: IF DD$ = "P"  OR DD$ = "p"  THEN 11567
  472. 11554  IF DD$ =  CHR$(27)  THEN  GOSUB 6500: GOTO 11582
  473. 11555  IF DD$ < >"S"  AND DD$ < >"s"  THEN  GOSUB 4000: GOTO 11552
  474. 11557  GOSUB 2500: VTAB 20:MS$ = "Set Slot and drive.": GOSUB 1000
  475. 11558  HTAB 4: PRINT "Slot: ";
  476. 11559  GOSUB 11590: IF DD$ =  CHR$(27)  THEN  GOSUB 6500: GOTO 11582
  477. 11560  IF  VAL(DD$) <1  OR  VAL(DD$) >7  THEN  GOSUB 4000: GOTO 11559
  478. 11561 SL =  VAL(DD$): PRINT SL: HTAB 4: PRINT "Drive:";
  479. 11562  GOSUB 11590: IF DD$ =  CHR$(27)  THEN  GOSUB 6500: GOTO 11582
  480. 11563  IF  VAL(DD$) <1  OR  VAL(DD$) >2  THEN  GOSUB 4000: GOTO 11562
  481. 11564 DR =  VAL(DD$): PRINT DR
  482. 11565  ONERR  GOTO 11195
  483. 11566  PRINT  CHR$(4)"prefix,s"SL",d"DR: GOTO 11582
  484. 11567  GOSUB 2500: VTAB 20: HTAB 4: PRINT "Prefix:":LL = 35: VTAB 20
  485. 11568  ONERR  GOTO 11195
  486. 11570  PRINT  CHR$(4)"Prefix": INPUT NT$
  487. 11573  IF  LEN(NT$) > = LL  THEN NT$ = ""
  488. 11575  GOSUB 11120
  489. 11577  IF NT$ = ""  THEN 11582
  490. 11580  PRINT  CHR$(4)"Prefix"NT$
  491. 11582  GOSUB 2000
  492. 11583  POKE 216,0
  493. 11585  GOTO 11055
  494. 11590  REM <CTRL-0x0a>Give me a cursor!<CTRL-0x0a>
  495. 11595  FOR PA = 1 TO  LEN(CS$): PRINT  MID$ (CS$,PA,1) CHR$(8);: FOR PP = 0 TO 15: IF  PEEK(49152) <128  THEN  NEXT : NEXT : GOTO 11595
  496. 11600  GET DD$
  497. 11605  RETURN 
  498. 11610  REM <CTRL-0x0a>cat<CTRL-0x0a>
  499. 11613  GOSUB 2500: VTAB 21:MS$ = "Checking disk..": GOSUB 1000
  500. 11615 NR = 0
  501. 11620  PRINT  CHR$(4)"prefix"
  502. 11625  INPUT NT$
  503. 11630  CALL BOX,22,3,18,16
  504. 11633  HOME 
  505. 11634  IF D = 5  THEN  PRINT "   Catalog of": PRINT "  directories:": GOTO 11650
  506. 11635  PRINT "Catalog of SND."
  507. 11640  PRINT "     files:"
  508. 11650  POKE 216,0
  509. 11655  ONERR  GOTO 11705
  510. 11660  PRINT  CHR$(4)"open"NT$",tdir"
  511. 11665  PRINT  CHR$(4)"read"NT$
  512. 11670  INPUT K$: INPUT K$:NF = 0
  513. 11675  PRINT 
  514. 11680  INPUT K$
  515. 11683  IF D = 5  THEN  IF  MID$ (K$,18,3) < >"DIR"  THEN 11680
  516. 11684  IF D = 5  THEN 11690
  517. 11685  IF  LEFT$(K$,5) < >" SND."  THEN 11680
  518. 11690 NF = NF +1: IF NF/10 =  INT(NF/10)  THEN  GOSUB 11735
  519. 11695  HTAB 1: PRINT  LEFT$(K$,16);
  520. 11700  GOTO 11680
  521. 11705  POKE 216,0
  522. 11710  PRINT  CHR$(4)"close"
  523. 11715  IF D = 5  AND NF = 0  THEN  PRINT " No directories.": GOTO 11720
  524. 11716  IF NF = 0  THEN  PRINT "   No files."
  525. 11720 NR = 1
  526. 11725  GOSUB 11735
  527. 11730  GOTO 11000
  528. 11735  PRINT : PRINT " Press any key.": PRINT  CHR$(4): GET DD$
  529. 11740  CALL BOX,22,3,18,16
  530. 11745  IF NR = 1  THEN 11755
  531. 11750  HOME : PRINT  CHR$(4)"read"NT$
  532. 11755  RETURN 
  533. 12000  REM <CTRL-0x0a>Clear routine<CTRL-0x0a>
  534. 12005 EB = 1
  535. 12010  GOSUB 2500
  536. 12020  VTAB 20:MS$ = "Clear routine in memory": GOSUB 1000
  537. 12030  HTAB 4: PRINT "Are you sure you want to do this?";
  538. 12040  GOSUB 11590
  539. 12050  IF DD$ = "N"  OR DD$ = "n"  THEN  GOSUB 6500: GOTO 12080
  540. 12060  IF DD$ < >"Y"  AND DD$ < >"y"  THEN  GOSUB 4000: GOTO 12040
  541. 12065  GOSUB 6800
  542. 12070  FOR I = 1 TO PT:A(I) = 0: NEXT 
  543. 12075 HI = 0:PT = 0:TB = 0:BB = 0:LOC = GO +4: FOR I = 0 TO 4: POKE LOC +I,0: NEXT 
  544. 12078  GOSUB 7000
  545. 12080 EB = 0
  546. 12090  RETURN 
  547. 13000  REM <CTRL-0x0a>Quit?<CTRL-0x0a>
  548. 13005 EB = 1
  549. 13010  GOSUB 2500
  550. 13020 MS$ = "Exit to Soundmaker II.": VTAB 20: GOSUB 1000
  551. 13030  HTAB 4: PRINT "Are you sure you want to quit?";
  552. 13040  GOSUB 11590
  553. 13050  IF DD$ = "N"  OR DD$ = "n"  THEN  GOSUB 6500: GOTO 13080
  554. 13060  IF DD$ < >"y"  AND DD$ < >"Y"  THEN  GOSUB 4000: GOTO 13040
  555. 13070  GOSUB 2500: VTAB 21:MS$ = "Thanks for using Soundmaker.": GOSUB 1000
  556. 13072  POKE 49168,0
  557. 13075  FOR PA = 0 TO 100: IF  PEEK(49152) <128  THEN  NEXT 
  558. 13077  PRINT  CHR$(4)"bye"
  559. 13080 EB = 0
  560. 13090  RETURN 
  561. 14000  REM <CTRL-0x0a>title page<CTRL-0x0a>
  562. 14010  CALL BOX,1,1,40,24
  563. 14015  HOME :MS$ = "Softdisk Presents..": GOSUB 1000
  564. 14020  CALL BOX,14,4,15,3
  565. 14025  POKE 32,0: POKE 33,40: POKE 34,0: POKE 35,24
  566. 14030 MS$ = "Soundmaker II": GOSUB 1000
  567. 14040  PRINT  CHR$(4)"BLOADSND.START.TUNE,A"LOC
  568. 14050  PRINT : PRINT : PRINT :MS$ = "by": GOSUB 1000
  569. 14060  PRINT : PRINT :MS$ = "Tom Hall and": GOSUB 1000
  570. 14070  PRINT :MS$ = "Bryan Vekovius": GOSUB 1000
  571. 14080  PRINT : PRINT :MS$ = "Softdisk is not public domain.": GOSUB 1000
  572. 14090  PRINT :MS$ = "Please respect the author's rights.": GOSUB 1000
  573. 14095  VTAB 22:MS$ = "Copyright (c) 1988 by Softdisk, inc.": GOSUB 1000
  574. 14100  CALL LOC
  575. 14110  VTAB 22:MS$ = "                                    ": GOSUB 1000: VTAB 22:MS$ = "Please press a key.": GOSUB 1000
  576. 14120  GET K$
  577. 14125  VTAB 22:MS$ = "    Please wait..  ": GOSUB 1000
  578. 14130  RETURN 
  579. 59999  REM <CTRL-0x0a>data<CTRL-0x0a>
  580. 60000  DATA White noise
  581. 60010  DATA Regular tone
  582. 60020  DATA Ascending tone
  583. 60030  DATA Descending tone
  584. 60040  DATA Hummy tone
  585. 60050  DATA Ascending hummy
  586. 60060  DATA Descending hummy
  587. 60070  DATA Add pause
  588. 60080  DATA Play routine
  589. 60090  DATA Edit routine
  590. 60100  DATA Disk options
  591. 60110  DATA Clear routine
  592. 60120  DATA Quit
  593. 60200  DATA 1,3,4,4,3,4,4,2
  594. 60300  DATA Pitch
  595. 60310  DATA Duration
  596. 60320  DATA Start Pitch
  597. 60330  DATA End Pitch
  598. 60340  DATA Note Length
  599. 60350  DATA Pause Length
  600. 60400  DATA 20,4,21,3,21,21,22,3
  601. 60500  DATA Load Routine
  602. 60510  DATA Save Routine
  603. 60520  DATA Set Prefix
  604. 60530  DATA Catalog disk
  605. 60535  DATA Directories
  606. 60540  DATA Exit